//
//  XMPPHelper.h
//  XMPPHelper
//
//  Created by 蔡成汉 on 15/5/7.
//  Copyright (c) 2015年 JW. All rights reserved.
//

/**
 *  XMPP管理类，为一个单例，负责整个XMPP消息处理
 */

#import <Foundation/Foundation.h>
#import "Message.h"

/**
 *  XMPP服务器地址
 */
#define XMPPServerAddress       @""

/**
 *  XMPP服务器端口号
 */
#define XMPPServerPort          5222

/**
 *  XMPP服务器名
 */
#define XMPPServerName          @""

/**
 *  连接超时时间
 */
#define XMPPConnectTimeOut      10

/**
 *  XMPP用户名关键字 -- 用于NSUserDefaults取值
 */
#define XMPPUserName            @"XMPPUserName"

/**
 *  XMPP用户密码关键字 -- 用于NSUserDefaults取值
 */
#define XMPPUserPassword        @"XMPPUserPassword"


@interface XMPPHelper : NSObject

/**
 *  XMPP是否连接成功 -- XMPP用户通过验证则表示已连接，否则表示未连接。
 */
@property (nonatomic , assign) BOOL isXmppConnected;

/**
 *  单例创建XMPPHelper
 *
 *  @return 实例化之后的XMPPHelper
 */
+(XMPPHelper *)myXMPPHelper;

/**
 *  连接XMPP -- 没有带上用户名和密码，但是需要从沙盒中获取用户名和密码
 *
 *  @param connect 连接的结果 -- 连接成功、连接失败(错误信息)
 */
-(void)connect:(void(^)(BOOL connect, NSError *error))result;

/**
 *  连接XMPP -- 带用户名和密码的连接
 *
 *  @param userName 用户名
 *  @param psd      用户密码
 *  @param result   连接结果 -- 连接成功、连接失败（错误信息）
 */
-(void)connectWithuserName:(NSString *)userName psd:(NSString *)psd result:(void (^)(BOOL connect, NSError *error))result;

/**
 *  注册XMPP新用户 -- 注册新用户只需用户名和密码即可 -- 一般新用户注册需由后台服务器处理，但客户端XMPP也支持单纯的XMPP新用户注册。
 *
 *  @param userName 用户名 -- XMPP服务器用户名
 *  @param psd      用户密码 -- XMPP服务器用户密码
 *  @param result   注册XMPP新用户结果 -- 以block形式返回
 */
-(void)registerXMPPUser:(NSString *)userName psd:(NSString *)psd result:(void (^)(BOOL registerResult, NSError *error))result;

/**
 *  添加好友 --- 这个操作应由本地服务器完成，将添加好友操作发送给本地服务器，本地服务器再连接openfier服务器进行添加好友操作，然后返回添加结果。
 *
 *  @param friendName XMPP用户名
 */
-(void)addFriend:(NSString *)friendName;

/**
 *  删除好友 -- 这个操作应由本地服务器完成，将删除好友操作发送给本地服务器，本地服务器再连接openfier服务器进行删除好友操作，然后返回删除结果。
 *
 *  @param friendName XMPP用户名
 */
-(void)deleteFriend:(NSString *)friendName;

#warning 测试 -- 经测试发现，在第一次连接XMPP服务器的时候会有一个获取列表的请求，如果主动调用该方法，也会生成一个请求。
-(void)getFriends;

/**
 *  创建聊天室
 *
 *  @param roomName 聊天室XMPP名
 */
-(void)creatChatRoom:(NSString *)roomName;

/**
 *  删除聊天室
 *
 *  @param roomName 聊天室XMPP名
 */
-(void)deleteChatRoom:(NSString *)roomName;

/**
 *  加入聊天室
 *
 *  @param roomName 聊天室XMPP名
 */
-(void)joinChatRoom:(NSString *)roomName;

/**
 *  推出聊天室
 *
 *  @param roomName 聊天室XMPP名
 */
-(void)leaveChatRoom:(NSString *)roomName;

/**
 *  发送消息
 *
 *  @param message Message -- Message里包含了发送对象以及消息类型等各种信息
 *  @param result  发送结果 -- 发送中、发送成功、发送失败
 */
-(void)sendMessage:(Message *)message result:(void(^)(Message *message, MessageSendType sendType))result;


/**
 *  关闭连接
 */
-(void)disconnect;

/**
 *  销毁XMPPStream -- 当程序将要被系统清理，需要调用该方法 -- appDelegate中调用
 */
-(void)teardownStream;

@end
